import pandas as pd

path = "../../exercise_data/chipotle.tsv"
pd1 = pd.read_csv(path, sep='\t')
pd.set_option('display.max_columns', None)  # 显示所有列
pd.set_option('display.max_colwidth', None)  # 显示每列的完整内容
pd.set_option('display.width', 1000)  # 增加显示的总宽度
print(pd1.head(10))
print(pd1.shape)  # 行列信息
print(pd1.columns)  # 列名称
print(pd1.index)  #

###############################################################
# 被下单数最多商品(item)是什么?
# 1新建一个 df 继承数量以及商品名 两列  进行排序  选择 数量进行聚合
# print(pd1[['item_name','quantity']])选中多列的话 要使用二维数组
most_ordered = pd1[['item_name', 'quantity']].groupby(['item_name'], as_index=False).agg({'quantity': 'sum'})
# 2对新的df 进行排序  选取quantity列
most_ordered.sort_values('quantity', ascending=False, inplace=True)
# 设置 ascending=False 表示按降序排序。
# 设置 inplace=True 表示直接在原数据框上进行修改，而不是返回一个新的数据框。

print(most_ordered.head())
###############################################################
# 在item_name这一列中，一共有多少种商品被下单？
print(pd1['item_name'].value_counts().shape[0])  # 聚合值 并统计行数
print(pd1['item_name'].value_counts().index)  #
print(pd1['item_name'].nunique())  # .nunique()：计算该列的唯一值数量
print(pd1['item_name'].unique())  # 打印 pd1 数据框中 item_name 列的所有唯一值
###############################################################
# 在choice_description中，下单次数最多的商品是什么？
print(pd1['choice_description'].value_counts().head())
###############################################################
# 一共有多少商品被下单？
sum = pd1['quantity'].sum()
print(sum)
###############################################################
# 将item_price转换为浮点数
# 注意 不是将int转为float 而是去掉$
# df=pd1['item_price'].astype(float)
# print(df.head())
print(pd1['item_price'].dtype)
function1=lambda x:float(x[1:])   #lambda就是箭头函数
pd1['item_price'] = pd1['item_price'].apply(function1)
print(pd1['item_price'].dtype)
print(pd1.head(2))
###############################################################
#在该数据集对应的时期内，收入(revenue)是多少
#先拆分 相乘 再取和
"""
round(number, ndigits)
number：需要四舍五入的数字。
ndigits：可选参数，指定四舍五入的小数位数。如果不提供，默认为 0，即四舍五入到最接近的整数。
"""
pd1['total']=round(pd1['quantity']*pd1['item_price'],2)
print(pd1['total'].sum())
###############################################################
#在该数据集对应的时期内，一共有多少订单？
print(pd1['order_id'].tail(1))
print(pd1['order_id'].unique())# 打印 pd1 数据框中 order_id 列的所有唯一值
###############################################################
#每一单(order)对应的平均总价是多少？
print(pd1['total'].sum()/pd1['order_id'].unique()[-1])

"""
groupby()函数用于对数据框进行分组，然后对每个分组进行聚合操作。
agg()函数用于对分组后的数据进行聚合操作，agg()函数可以接受一个或多个函数作为参数，
这些函数用于对每个分组进行不同的聚合操作。
"""

pdc=pd1[['total','order_id']].groupby('order_id',as_index=False).agg({'total':'sum'})
print(pdc['total'].mean())
###############################################################
#一共有多少种不同的商品被售出？
print(pd1['item_name'].nunique())








